/****************************************************
 * Description: Entity for 用户基本信息
 * Copyright:   Copyright (c) 2014
 * Company:     beiwaionline
 * @author      bfsu
 * @version     1.0
 * @see
	HISTORY
    *  2014-01-10 bfsu Create File
**************************************************/

package com.bfsuolframework.security.entity;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import com.bfsuolframework.core.entity.Entity;
import com.bfsuolframework.core.entity.EntitySupport;


public class BaseUser extends EntitySupport implements Entity {

    private static final long serialVersionUID = 1L;

    public BaseUser(){}
    public BaseUser(Long id){
        this.id = id;
    }

    private Long id;
    private String loginName;//用户名
    private String password;//密码
    private String userName;//中文名
    private String pinyinNameZh;//中文名拼音
    private String userNameEn;//英文名
    private String nickname;//昵称
    private Integer gender;//性别
    private Date birthday;//生日
    private String homePhone;//家庭电话
    private String mobile;//手机
    private String msn;//MSN
    private String qq;//QQ
    private String address;//地址
    private String postcode;//邮编
    private String email;//email
    private Date registerDate;//注册时间
    private Long onlineTime;//在线时长
    private Long loginCount;//登录次数
    private Date lastLoginTime;//最后登录时间
    private String lastLoginIp;//最后登录IP
    private Integer status;//状态
    private Integer userType;//用户类型
    private String imgUrl;//照片URL
    private Long createUserId;//创建人id
    private String createUserName;//创建人姓名
    private Date createTime;//创建时间
    private Long updateUserId;//更新人id
    private String updateUserName;//更新人姓名
    private Date updateTime;//更新时间
    private Collection<Role> roles;//角色
    private Collection<Group> groups;//用户组
    /**
     * @return 主键
     */
    public Long getId() {
        return id;
    }
    /**
     * @param 主键
     */
    public void setId(Long id) {
        this.id = id;
    }
    
    /**
     * 返回用户名
     * @return 用户名
     */
    public String getLoginName() {
        return loginName;
    }
    
    /**
     * 设置用户名
     * @param loginname 用户名
     */
    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }
    
    /**
     * 返回密码
     * @return 密码
     */
    public String getPassword() {
        return password;
    }
    
    /**
     * 设置密码
     * @param password 密码
     */
    public void setPassword(String password) {
        this.password = password;
    }
    
    /**
     * 返回中文名
     * @return 中文名
     */
    public String getUserName() {
        return userName;
    }
    
    /**
     * 设置中文名
     * @param userName 中文名
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    /**
     * 返回中文名拼音
     * @return 中文名拼音
     */
    public String getPinyinNameZh() {
        return pinyinNameZh;
    }
    
    /**
     * 设置中文名拼音
     * @param pinyinNameZh 中文名拼音
     */
    public void setPinyinNameZh(String pinyinNameZh) {
        this.pinyinNameZh = pinyinNameZh;
    }
    
    /**
     * 返回英文名
     * @return 英文名
     */
    public String getUserNameEn() {
        return userNameEn;
    }
    
    /**
     * 设置英文名
     * @param userNameEn 英文名
     */
    public void setUserNameEn(String userNameEn) {
        this.userNameEn = userNameEn;
    }
    
    /**
     * 返回昵称
     * @return 昵称
     */
    public String getNickname() {
        return nickname;
    }
    
    /**
     * 设置昵称
     * @param nickname 昵称
     */
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    
    /**
     * 返回性别
     * @return 性别
     */
    public Integer getGender() {
        return gender;
    }
    
    /**
     * 设置性别
     * @param gender 性别
     */
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    
    /**
     * 返回生日
     * @return 生日
     */
    public Date getBirthday() {
        return birthday;
    }
    
    /**
     * 设置生日
     * @param birthday 生日
     */
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
    /**
     * 返回家庭电话
     * @return 家庭电话
     */
    public String getHomePhone() {
        return homePhone;
    }
    
    /**
     * 设置家庭电话
     * @param homePhone 家庭电话
     */
    public void setHomePhone(String homePhone) {
        this.homePhone = homePhone;
    }
    
    /**
     * 返回手机
     * @return 手机
     */
    public String getMobile() {
        return mobile;
    }
    
    /**
     * 设置手机
     * @param mobile 手机
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    
    /**
     * 返回MSN
     * @return MSN
     */
    public String getMsn() {
        return msn;
    }
    
    /**
     * 设置MSN
     * @param msn MSN
     */
    public void setMsn(String msn) {
        this.msn = msn;
    }
    
    /**
     * 返回QQ
     * @return QQ
     */
    public String getQq() {
        return qq;
    }
    
    /**
     * 设置QQ
     * @param qq QQ
     */
    public void setQq(String qq) {
        this.qq = qq;
    }
    
    /**
     * 返回地址
     * @return 地址
     */
    public String getAddress() {
        return address;
    }
    
    /**
     * 设置地址
     * @param address 地址
     */
    public void setAddress(String address) {
        this.address = address;
    }
    
    /**
     * 返回邮编
     * @return 邮编
     */
    public String getPostcode() {
        return postcode;
    }
    
    /**
     * 设置邮编
     * @param postcode 邮编
     */
    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }
    
    /**
     * 返回email
     * @return email
     */
    public String getEmail() {
        return email;
    }
    
    /**
     * 设置email
     * @param email email
     */
    public void setEmail(String email) {
        this.email = email;
    }
    
    /**
     * 返回注册时间
     * @return 注册时间
     */
    public Date getRegisterDate() {
        return registerDate;
    }
    
    /**
     * 设置注册时间
     * @param registerDate 注册时间
     */
    public void setRegisterDate(Date registerDate) {
        this.registerDate = registerDate;
    }
    
    /**
     * 返回在线时长
     * @return 在线时长
     */
    public Long getOnlineTime() {
        return onlineTime;
    }
    
    /**
     * 设置在线时长
     * @param onlineTime 在线时长
     */
    public void setOnlineTime(Long onlineTime) {
        this.onlineTime = onlineTime;
    }
    
    /**
     * 返回登录次数
     * @return 登录次数
     */
    public Long getLoginCount() {
        return loginCount;
    }
    
    /**
     * 设置登录次数
     * @param loginCount 登录次数
     */
    public void setLoginCount(Long loginCount) {
        this.loginCount = loginCount;
    }
    
    /**
     * 返回最后登录时间
     * @return 最后登录时间
     */
    public Date getLastLoginTime() {
        return lastLoginTime;
    }
    
    /**
     * 设置最后登录时间
     * @param lastLoginTime 最后登录时间
     */
    public void setLastLoginTime(Date lastLoginTime) {
        this.lastLoginTime = lastLoginTime;
    }
    
    /**
     * 返回最后登录IP
     * @return 最后登录IP
     */
    public String getLastLoginIp() {
        return lastLoginIp;
    }
    
    /**
     * 设置最后登录IP
     * @param lastLoginIp 最后登录IP
     */
    public void setLastLoginIp(String lastLoginIp) {
        this.lastLoginIp = lastLoginIp;
    }
    
    /**
     * 返回状态
     * @return 状态
     */
    public Integer getStatus() {
        return status;
    }
    
    /**
     * 设置状态
     * @param status 状态
     */
    public void setStatus(Integer status) {
        this.status = status;
    }
    
    /**
     * 返回用户类型
     * @return 用户类型
     */
    public Integer getUserType() {
        return userType;
    }
    
    /**
     * 设置用户类型
     * @param userType 用户类型
     */
    public void setUserType(Integer userType) {
        this.userType = userType;
    }
    
    /**
     * 返回照片URL
     * @return 照片URL
     */
    public String getImgUrl() {
        return imgUrl;
    }
    
    /**
     * 设置照片URL
     * @param imgUrl 照片URL
     */
    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }
    
    /**
     * 返回创建人id
     * @return 创建人id
     */
    public Long getCreateUserId() {
        return createUserId;
    }
    
    /**
     * 设置创建人id
     * @param createUserId 创建人id
     */
    public void setCreateUserId(Long createUserId) {
        this.createUserId = createUserId;
    }
    
    /**
     * 返回创建人姓名
     * @return 创建人姓名
     */
    public String getCreateUserName() {
        return createUserName;
    }
    
    /**
     * 设置创建人姓名
     * @param createUserName 创建人姓名
     */
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    
    /**
     * 返回创建时间
     * @return 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }
    
    /**
     * 设置创建时间
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    
    /**
     * 返回更新人id
     * @return 更新人id
     */
    public Long getUpdateUserId() {
        return updateUserId;
    }
    
    /**
     * 设置更新人id
     * @param updateUserId 更新人id
     */
    public void setUpdateUserId(Long updateUserId) {
        this.updateUserId = updateUserId;
    }
    
    /**
     * 返回更新人姓名
     * @return 更新人姓名
     */
    public String getUpdateUserName() {
        return updateUserName;
    }
    
    /**
     * 设置更新人姓名
     * @param updateUserName 更新人姓名
     */
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    
    /**
     * 返回更新时间
     * @return 更新时间
     */
    public Date getUpdateTime() {
        return updateTime;
    }
    
    /**
     * 设置更新时间
     * @param updateTime 更新时间
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    
    /**
     * @return 角色
     */
    public Collection<Role> getRoles() {
        return roles;
    }
	
    /**
     * @param 角色
     */
    public void setRoles(Collection<Role> roles) {
        this.roles = roles;
    }
	
    /**
     * @param 角色
     */
    public void addRole(Role role) {
    	if(this.roles == null){
    		this.roles = new HashSet<Role>();
    	}
        this.roles.add(role);
    }
	
    /**
     * @param 角色
     */
    public void removeRole(Role role) {
    	if(this.roles == null){
    		return;
    	}
        this.roles.remove(role);
    }
    
    /**
     * @return 用户组
     */
    public Collection<Group> getGroups() {
        return groups;
    }
	
    /**
     * @param 用户组
     */
    public void setGroups(Collection<Group> groups) {
        this.groups = groups;
    }
	
    /**
     * @param 用户组
     */
    public void addGroup(Group group) {
    	if(this.groups == null){
    		this.groups = new HashSet<Group>();
    	}
        this.groups.add(group);
    }
	
    /**
     * @param 用户组
     */
    public void removeGroup(Group group) {
    	if(this.groups == null){
    		return;
    	}
        this.groups.remove(group);
    }
    


    public int hashCode() {
        return new HashCodeBuilder().append("BaseUser").append(this.getId()).toHashCode();
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (getClass() != obj.getClass())
            return false;
        if (!(obj instanceof BaseUser))
            return false;
        final BaseUser that = (BaseUser)obj;
        return new EqualsBuilder().append(this.getId(), that.getId()).isEquals();
    }

    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.SIMPLE_STYLE).append("BaseUser").append("ID="+this.getId()).toString();
    }
}

